package business;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import persistence.db.DataSet;
import persistence.model.AbstractModel;
import persistence.model.AnneeEtude;
import persistence.model.Enseignant;
import persistence.model.Formation;
import persistence.model.Groupe;
import persistence.model.Seance;
import persistence.model.StatutEnseignant;
import persistence.model.TypeHeure;
import utility.Record;
import utility.Time;

public class EnseignantBL {
	
	private Enseignant enseignant = null;
	
	
	public EnseignantBL(){
		
	}
	
	public EnseignantBL(int id){
		enseignant = (Enseignant) Enseignant.all().get(id);
	}
	
	/**
	 * @return retourne si la demande d'ajout ou de modification est valide ou non
	 */
	public boolean verifierValiditeModif(){
		//TODO
		return true;
	}
	
	/**
	 * @return retourne si la demande de suppression est valide ou non
	 */
	public boolean verifierValiditeSuppr(){
		//TODO
		return true;
	}
	
	/**
	 * @param id : identifiant de l'enseignant
	 * @param nom : nom de l'enseignant
	 * @param prenom : prenom de l'enseignant
	 * @param titre : civilité de l'enseignant
	 * @param tel : numéro de téléphone de l'enseignant
	 * @param mail : adresse mail de l'enseignant
	 */
	public void ajouterEnseignant(int id, String titre, String nom, String prenom, String tel, String mail, int idStatutEnseignant) {
		enseignant = new Enseignant(id, titre, nom, prenom, tel, mail, idStatutEnseignant);
		enseignant.save();
	}
	
	/**
	 * @param id : identifiant de l'enseignant
	 * @param nom : nom de l'enseignant
	 * @param prenom : prenom de l'enseignant
	 * @param titre : civilité de l'enseignant
	 * @param tel : numéro de téléphone de l'enseignant
	 * @param mail : adresse mail de l'enseignant
	 */
	public void modifierEnseignant(int id, String titre, String nom, String prenom, String tel, String mail, int idStatutEnseignant) {
		enseignant = new Enseignant(id, titre, nom, prenom, tel, mail, idStatutEnseignant);
		enseignant.save(id);
	}
	
	/**
	 * @param id : identifiant de l'enseignant
	 */
	public void supprimerEnseignant() {
		enseignant = new Enseignant(this.getIdEnseignant());
		enseignant.delete();
	}
	
	public int getIdEnseignant() {
		return enseignant.getId();
	}

	public void setIdEnseignant(int idEnseignant) {
		enseignant.setId(idEnseignant);
	}

	public String getNomEnseignant() {
		return enseignant.getNomEnseignant();
	}

	public void setNomEnseignant(String nomEnseignant) {
		enseignant.setNomEnseignant(nomEnseignant);
	}

	public String getPrenomEnseignant() {
		return enseignant.getPrenomEnseignant();
	}

	public void setPrenomEnseignant(String prenomEnseignant) {
		enseignant.setPrenomEnseignant(prenomEnseignant);
	}

	public String getTitreEnseignant() {
		return enseignant.getTitreEnseignant();
	}

	public void setTitreEnseignant(String titreEnseignant) {
		enseignant.setTitreEnseignant(titreEnseignant);
	}

	public String getTelEnseignant() {
		return enseignant.getTelEnseignant();
	}

	public void setTelEnseignant(String telEnseignant) {
		enseignant.setTelEnseignant(telEnseignant);
	}

	public String getMailEnseignant() {
		return enseignant.getMailEnseignant();
	}

	public void setMailEnseignant(String mailEnseignant) {
		enseignant.setMailEnseignant(mailEnseignant);
	}
	
	public int getIdStatutEnseignant() {
		return enseignant.getIdStatutEnseignant();
	}

	public void setIdStatutEnseignant(int idStatutEnseignant) {
		enseignant.setIdStatutEnseignant(idStatutEnseignant);
	}
	
	public String[] getListeTitreEnseignant(){
		String[] listeTitre = {"M", "Mme", "Mlle", "Dr", "Pr", "Me", "Gal", "Cel", "Cne", "Cdt" };
		return listeTitre;
	}
	
	/**
	 * @return une liste de record
	 * chaque record comprenant le nom de l'enseignant ainsi que son id
	 */
	public ArrayList<Record> getListeEnseignant()
	{
		ArrayList<Record> listeEnseignant = new ArrayList<Record>();
		for (AbstractModel ens : Enseignant.all())
		{
			Enseignant ensCourant = (Enseignant)ens;
			
			int idEnseignant = ensCourant.getId();
			String nomEnseignant = ensCourant.getNomEnseignant();
			
			listeEnseignant.add(new Record(idEnseignant, nomEnseignant));
		}
		
		return listeEnseignant;
	}
	
	/**
	 * @return une liste de record en fonction d'un enseignant
	 * chaque record comprenant le nom du statut d'enseignant ainsi que son id
	 */
	
	public Record getStatutEnseignant()
	{
		StatutEnseignant se = (StatutEnseignant) StatutEnseignant.all().get(enseignant.getIdStatutEnseignant());

		System.out.println(se.getNomStatutEns());
		
		int idStat = se.getId();

		String nomStat = se.getNomStatutEns();
		return new Record(idStat, nomStat);
	}
	

	/**
	 * Accés à toutes les séances de la periode pour le semestre courant
	 * @param periode souhaitée
	 * @return ArrayListe de seance correspondant
	 */

	public ArrayList<SeanceBL> getListeSeances(int idPeriode) {
		ArrayList<SeanceBL> resultSeance = new ArrayList<SeanceBL>();
		for (AbstractModel seance : Seance.all().filter("fk_seance_periode = " + idPeriode))
		{
			Enseignant ens = ((Seance)seance).getService().getEnseignant();
			if(ens.getId() == this.getIdEnseignant()){
				resultSeance.add(new SeanceBL((Seance) seance));
			}
		}
		
		return resultSeance;
	}
	
}
